From: Aron Xu <aron@debian.org>
Date: Mon, 13 Feb 2012 14:45:08 +0800
Subject: get sev by name

---
 netcat.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/netcat.c b/netcat.c
index f3cc8c1..d912544 100644
--- a/netcat.c
+++ b/netcat.c
@@ -949,12 +949,19 @@ atelnet(int nfd, unsigned char *buf, unsigned int size)
 void
 build_ports(char *p)
 {
+        struct servent *sv;
 	const char *errstr;
 	char *n;
 	int hi, lo, cp;
 	int x = 0;
 
-	if ((n = strchr(p, '-')) != NULL) {
+        sv = getservbyname(p, uflag ? "udp" : "tcp");
+        if (sv) {
+                portlist[0] = calloc(1, PORT_MAX_LEN);
+                if (portlist[0] == NULL)
+                        err(1, NULL);
+                snprintf(portlist[0], PORT_MAX_LEN, "%d", ntohs(sv->s_port));
+        } else if ((n = strchr(p, '-')) != NULL) {
 		*n = '\0';
 		n++;
 
-- 
